In a system with more than one hardware-based controller, a single controller typically acts as the master and the other controllers act as the slaves, ready to become the master if the master should fail. The master can have control over the system bus, it can control which cards are active at a time and it can control system functions, such as reset operations and shutdown. Moreover, in a redundant system, the master may be the active card, while the redundant card or cards are maintained offline. Accordingly, it is important that the master controller function properly, and if the master card were to fail, it should be quickly isolated from the system and another controller should quickly replace it as master.
It is generally a difficult problem to correctly assign master and slave or active and isolated relationships to controllers in the presence of all possible failures. Typically, software is written to implement a process that should anticipate all possible failures and devise a fail safe plan that will transition the malfunctioning card out of the system and hand over its role to a card that is operating properly. However, in practice it is difficult to anticipate all the ways a card may fail. Moreover, it is commonly the case that the process fails to consider certain hardware failures that will cause a failed controller to be given master status in the system. When this happens the successful operation of the entire system is in jeopardy.
Even if an adequate scheme can be put in place to anticipate failures, existing master/slave arbitration systems employ a centralized architecture that has a central point of control. This central point of control causes problems in that a single board or component failure can result in a system-wide failure. This is particularly troubling for mission critical systems, such as telecommunication systems and defense systems.
Accordingly, there is a need in the art for a more robust system for allowing master/slave arbitration between a plurality of cards.